// 全选效果以及反选
function allChecked() {
     // 全选效果
     $(".allCheck").on("change", function() {
       if($(this).prop("checked")) {
         $("table td input[type=checkbox]").prop("checked",true);
       } else {
         $("table td input[type=checkbox]").prop("checked",false);
       }
     })

     // 反选效果 
     $("table").on("change","td input",function() {
         var bool = true;
         $("table td input").each(function() {
           if(!$(this).prop("checked")) {
             bool = false;
           }
         });
         if(bool) {
           $(".allCheck").prop("checked",true);
         } else {
           $(".allCheck").prop("checked",false);
         }
     })
}

//获取分页数组
function getPageArr(nowPage,maxPage) {
    var min = nowPage > 6;
    var max = nowPage < maxPage - 6;
    var arr = [],arrData = {};
    arrData.hasLastPage = true;
    arrData.arr = arr;
    if ((maxPage <= 11)&&(maxPage >= 2)) {
        for (var i = 2; i < maxPage; i++) {
          arr.push(i);
        };
        return arrData
    } else if(maxPage <= 2) {
      arrData.hasLastPage = false;
    }

    if(max && min) {
      arrData.afterLi = true;
      arrData.beforeLi = true;
      for (var i = nowPage - 5; i < nowPage + 5; i++) {
        arr.push(i);
      };
    } else if(min) {
      arrData.beforeLi = true;
      for (var i = nowPage - 5; i < maxPage; i++) {
        arr.push(i);
      };
    } else if (max) {
      arrData.afterLi = true;
      for (var i = 2; i < nowPage + 5; i++) {
        arr.push(i);
      };
    }
    return arrData 
 }

//页面切换的时候获取对应的后台数据
function getJSON(urlStr) {
   return function($http) {
            return $http({
              method: "get",
              url: urlStr
            }).then(function(res){
              console.log("获取到json文件")
              return res.data
            },function(res){
                alert("没有获取到所需文件");
            })
          }
}

//地图页面绘图函数
function mapinit(mapData,cb) {
       Highcharts.setOptions({
            lang:{
                drillUpText:"返回 > {series.name}"
            }
        });
        var data = Highcharts.geojson(Highcharts.maps['countries/cn/custom/cn-all-china']);
        var small = $('#container').width() < 400;

        // 给省份设置随机数据
        $.each(data, function (i) {
            this.drilldown = this.properties['drill-key'];
            for (var i = 0; i < mapData.length; i++) {
                 if (mapData[i].key == this.drilldown) {
                    this.value = mapData[i].value;
                    break;
                 } else {
                    this.value = null;
                 }
            };
        });

        //初始化地图
        $('#allmap').highcharts('Map', {
            chart : {
                events: {
                    drilldown: function (e) {
                       cb(e.point.drilldown);
                    }
                }
            },
            credits:{
                href:"http://www.peng8.net/",
                text:"www.peng8.net"
            },
            title : {
                text : 'highmap中国地图By peng8'
            },
            subtitle: {
                text: '中国',
                floating: true,
                align: 'right',
                y: 50,
                style: {
                    fontSize: '16px'
                }
            },
            legend: small ? {} : {
                layout: 'vertical',
                align: 'right',
                verticalAlign: 'middle'
            },
            tooltip:{
                pointFormat:"{point.properties.cn-name}:{point.value}"
            },
            colorAxis: {
                min: 0,
                minColor: '#e6f5ff',
                maxColor: '#4aa7ea'
            },
            mapNavigation: {
                enabled: true,
                buttonOptions: {
                    verticalAlign: 'bottom'
                }
            },
            plotOptions: {
                map: {
                    states: {
                        hover: {
                            color: '#EEDD66'
                        }
                    }
                }
            },
            series : [{
                data : data,
                name: '中国',
                dataLabels: {
                    enabled: true,
                    format: '{point.properties.cn-name}'
                }
            }],
            drilldown: {

                activeDataLabelStyle: {
                    color: '#FFFFFF',
                    textDecoration: 'none',
                    textShadow: '0 0 3px #000000'
                },
                drillUpButton: {
                    relativeTo: 'spacingBox',
                    position: {
                        x: 0,
                        y: 60
                    }
                }
            }
        });
}

//页面切换的时候d导航条显示背景变色
function navTitClass(obj) {
    $("nav ul li").removeClass("thispage");
    obj.addClass("thispage")
}

// 绘图的一些集成方法
function drawFn() {

  var draw = {};
  /* 作者dumen, 绘制柱状图函数
   * 第一个参数为需要绘图的JQ对象
   * 第一个参数为需要绘图的配置
   * 第三个参数为图表的柱状点击的回调函数
   */
  draw.drawColumn = function(obj,opints,clickFn) {
      obj.highcharts({
        chart: {
            type: "column",
        },
        title: {
            text: opints.title || null
        },
        xAxis: {
            categories: opints.xcate || null,
            type: 'category',
            labels: {
                rotation: 0,
                style: {
                    fontSize: '12px',
                    fontFamily: 'Verdana, sans-serif'
                }
            }
        },
        yAxis: {
            min: 0,
            tickPixelInterval: 95,
            title: {
                text: null
            },
            gridLineWidth: 0
        },
        legend: {
            enabled: false,
        },
        tooltip: {
            pointFormat: opints.format || "{point.name}" + ': <b>{point.y:.0f}</b>'
        },
        series: [{
            //传入的数组，用来绘图的数据
            data: opints.seriseArr || null,
            dataLabels: {
                enabled: true,
                rotation: 0,
                color: '#FFFFFF',
                align: 'center',
                format: '{point.y}', // one decimal
                y: 0, // 10 pixels down from the top
                style: {
                    fontSize: '13px',
                    fontFamily: 'Verdana, sans-serif'
                }
            }
         }],
          plotOptions: {
            series: {
              pointWidth: 25,
              currsor: "pointer",
              events : {
                click : function(e) {
                  if(clickFn !== undefined) {
                      clickFn(this.userOptions.data[e.point.index][0],this.userOptions.data[e.point.index][2]);
                  }
                }
              }
            },
          },
          credits: {
            enabled: false
           }
      }); 
  }

  /* 作者dumen, 绘制柱状图函数
   * 第一个参数为需要绘图的JQ对象
   */
  draw.drawLine = function(obj,opints) {
    obj.highcharts({
        title: {
            text: opints.title || null,
            x: -20 //center
        },
        colors: opints.colorArr || ['#2f7ed8', '#0d233a', '#8bbc21', '#910000', '#1aadce', 
   '#492970', '#f28f43', '#77a1e5', '#c42525', '#a6c96a'],
        xAxis: {
            categories: opints.xcate || null
        },
        yAxis: {
            title: {
                text: null
            },
            gridLineWidth: 0,
            // 设置刻度间隔，用于调节刻度线
            tickPixelInterval: 95,
            plotLines: [{
                value: 0,
                width: 1,
                color: '#808080'
            }]
        },
        tooltip: {
            //设置线性单位
            valueSuffix: '次'
        },
        legend: {
            enabled: false,
        },
        plotOptions: {
            series: {
              // pointWidth: 0,
              lineWidth: 1,
              currsor: "pointer"
            },
          },
        series: opints.seriseArr
    });
  }

  /* 作者dumen, 绘制柱状图函数
   * 第一个参数为需要绘图的JQ对象
   * 第二个参数为标题
   * 第三个参数为传入的数据，是一个数组在。数组的子元素也是数组。子元素第一个值为该项名称，第二个为该项的值。
   * 第四个参数为图表的柱状点击的回调函数
   */
  draw.drawBar = function(obj,titleStr,seriseArr,clickFn) {
    obj.highcharts({
         chart: {
            backgroundColor: null,
             plotBackgroundColor: null,
             plotBorderColor: null,
             plotBorderWidth: null,
             plotShadow: false,
             type: 'pie'
         },
         title: {
             text: titleStr
         },
         tooltip: {
             pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>'
         },
         // 添加水印链接
         credits: {
            enabled: false
         },
         plotOptions: {
             pie: {
                 allowPointSelect: true,
                 cursor: 'pointer',
                 dataLabels: {
                     // enabled: false
                     distance: -30,
                     format: "{point.name}" + "{y}"
                 },
                 events: {
                    click : function(e) {
                      if(clickFn !== undefined) {
                          var _this = this;
                          var es = e;
                          clickFn(_this,es);
                      }
                   }
                 },
                 showInLegend: true
             }
         },
         series: [{
             name: 'Brands',
             colorByPoint: true,
             data: seriseArr
         }]
     });
  }
  return draw
}

// 日期组件的构造函数
function dataFn() {
    var api = this;

    // 返回某年某月某天是星期几,参数都可选（默认当前月份的1号）
    this.getWeeks = function(day,mh,year) {
      var year = year || new Date().getYear() + 1900;
      var mh = mh || new Date().getMonth();
      var date = day || 1;
      mh -= 1;
      var t = new Date(year,mh,date);
      var a = t.getDay();
      return a 
    }

    // 返回某年某月的最大天数,第二个参数可选（默认当前年份）
    this.getMaxDay = function(mh,year) {
      var year = year || new Date().getYear() + 1900;
      switch(mh){
        case 4:
        case 6:
        case 9:
        case 11:
          return 30
        case 2: 
          if ((year%4 == 0) && (year%100 !== 0) || (year%400 == 0) ) {
            return 29
          } else {
            return 28
          };
        default:
          return 31
      }
    }

    // 初始化日期的函数,obj为必填，data不填则默认当前日期
    this.init = function(obj,data) {
      var year,month,date,dateN;
      if(data) {
        year = data.year || 2016;
        month = data.month || 1;
        date = data.date || 1;
        dateN = data.dateN || date;
      } else {
        var time = new Date();
        year = time.getYear() + 1900;
        month = time.getMonth() + 1;
        date = time.getDate();
        dateN = date;
      }

      var mhN = beforeZero(month);
      obj.find(".data_mh").html(year + " - " + mhN);
      // 初始化日期
      var box = obj.find(".data_con").eq(0);
      var dates = this.getMaxDay(year,month);
      var prvDates = this.getMaxDay(year,month-1);
      var days = this.getWeeks(year,month);
      if(days + dates > 35) {
        var lastDates = 42 - days - dates;
      } else {
        var lastDates = 35 - days - dates;
      }

      var str ="";
      for (var i = days; i > 0; i--) {
        var a = beforeZero(prvDates - i);
        str += "<span>" + a + "</span>";
      };
      for (var i = 1; i <= dates; i++) {
        var b = beforeZero(i);
        str += "<span class='thisMonth'>" + b + "</span>";
      };
      for (var i = 1; i <= lastDates; i++) {
        var c = beforeZero(i);
        str += "<span>" + c + "</span>";
      };
      box.html("");
      box.html(str);
      box.children().eq(days + dateN - 1).addClass("checked");
    }

    //获取当前的日期
    this.getDate = function() {
      var str = $(".data_mh").html();
      str = str.split("-")
      year = parseInt(str[0]);
      month = parseInt(str[1]);
      date = parseInt($(".data_con .checked").html());
      var data = {
        year : year,
        month : month,
        date : date
      }
      return data
    }

    // 初始化框架并绑定事件，obj为外围对象，cb为需要传入回调函数。内部设定每次点击日期相关操作会运行回调函数并传入一个日期
    this.creat = function(obj,cb) {
      var frame = '<div class="data_prv"></div><div class="data_mh"></div><div class="data_next"></div><div class="data_week"><span>日</span><span>一</span><span>二</span><span>三</span><span>四</span><span>五</span><span>六</span></div><div class="data_con clearfix" id="data_con"></div><button class="one_w">查看该周信息</button>'
      obj.html(frame);
      this.init(obj);
      this.blnd(cb);
      var data = api.getDate();
      cb(data);
    }

    // 绑定相关事件,cb为需要传入回调函数。内部设定每次点击日期相关操作会运行回调函数并传入一个日期
    this.blnd = function(cb) {
      //日期选择函数
      $(".data_con").on("click",function(event){
        var tg = event.target;
        if ($(tg).hasClass("thisMonth")) {
          $(tg).addClass("checked").removeClass("check_start checks check_end").siblings().removeClass("checked check_start checks check_end");
        }
        var data = api.getDate();
        cb(data);
      })
      //下一个月份选择函数
      $(".data_next").on("click",function() {
        var data = api.getDate();
        data.month += 1;
        if (data.month > 12) {
          data.year += 1;
          data.month = 1
        }
        api.init($(this).parent(),data);
        cb(data);
      })
      //上一个月份选择函数
      $(".data_prv").on("click",function() {
        var data = api.getDate();
        data.month -= 1;
        if (data.month <= 0) {
          data.year -= 1;
          data.month = 12
        }
        api.init($(this).parent(),data);
        cb(data);
      })

      // 选择周按钮
      $(".one_w").on("click",function() {
          var data = api.getDate();

          var data2 = {
             year : data,year,
             month: data.month,
             date : data.date,
             week : true
          }
          // 选择一周的选项
          if ($(".data_con .checked").index() < 6) {
              data.month -= 1;
              if(data.month < 1) {
                data.year -= 1;
                data.month = 12;
              }
              data.date = api.getMaxDay(data.month,data.year) + parseInt($(".data_con .checked").html());
          }
          api.init($(this).parent(),data);
          function checked() {
            var t = $(".data_con .checked").index();
            console.log(t);
            $(".data_con span").eq(t).addClass("check_end");
            $(".data_con span").slice(t-5,t).addClass("checks");
            $(".data_con span").eq(t-6).addClass("check_start");
          }
          checked();
          cb(data2);
      })
    }
    //创建一个原始日期插件
    return api
}

//前导零函数 
function beforeZero(number) {
  if ((number >= 0)&&(number < 10)) {
     return "0" + number
  } else {
    return number
  }
}

//极限值函数
function limitValue(num,max,min) {
  if(num<=min) {
    num = min;
  }
  if (num>=max) {
    num = max;
  }
  return num
}

// 首页进入初始化函数
function indexOnload() {
    // 图表操作相关函数
     $(".test .next").on("click",function(){
        var t = $(this).parent().width();
        $(this).siblings(".form").stop().animate({
           "scrollLeft" : $(this).siblings(".form").scrollLeft() + t/2
        },800);
     })
     $(".test .prv").on("click",function() {
        var t = $(this).parent().width();
        $(this).siblings(".form").stop().animate({
           "scrollLeft" : $(this).siblings(".form").scrollLeft() - t/2
        },800);
     })
}

// 获取文件加密是上传路径的函数
function getPath(obj) {
    var path = getFullPath(obj);
    $("#filepath").val(path);
}
function getFullPath(obj) {
   if(obj) { 
       //ie 
       if (window.navigator.userAgent.indexOf("MSIE")>=1) { 
         obj.select(); 
         return document.selection.createRange().text; 
       }  else if(window.navigator.userAgent.indexOf("Firefox")>=1) { 
          //firefox 
           if(obj.files)  { 
              return obj.files.item(0).getAsDataURL(); 
           } 
           return obj.value; 
        } 
      return obj.value; 
    } 
}

// 百度地图异步调用的初始化函数
function baidumapinit() {
      var map = new BMap.Map("allMap");            // 创建Map实例
      var point = new BMap.Point(116.404, 39.915); // 创建点坐标
      map.centerAndZoom(point,15);                 
      map.enableScrollWheelZoom();//启用滚轮放大缩小
} 